package com.wy.semaphore_demo;

import java.util.Scanner;
import java.util.concurrent.Semaphore;

public class Main {
    // permits: 许可
    // 信号量：十字路口的红绿灯
    // permits = 5 : 允许最多 5 个拿到许可证
    // 一个线程取一个，可以有 5 个线程
    // 一个线程就取 5 个，只有一个线程
    // 许可只有数量的关系，并不要求，一定是 取的线程才能放回
    static Semaphore semaphore = new Semaphore(5);

    static class MyThread extends Thread {
        @Override
        public void run() {
            Scanner scanner = new Scanner(System.in);
            scanner.nextLine();
            semaphore.release();        // 放回一个许可
        }
    }

    public static void main(String[] args) throws InterruptedException {
        MyThread t = new MyThread();
        t.start();

        semaphore.acquire();
        semaphore.acquire();
        semaphore.acquire();
        semaphore.acquire();
        semaphore.acquire();
        semaphore.acquire();    // 阻塞
        System.out.println("成功");
    }
}

